﻿using System;
using System.Windows.Forms;
using QuanLyThuPhiTaiLieu.Biz;
using QuanLyThuPhiTaiLieu.Common;
using QuanLyThuPhiTaiLieu.Entity;
using System.IO;
using Telerik.WinControls.UI;
using System.Collections.Generic;
using System.Globalization;

namespace QuanLyThuPhiTaiLieu.Forms
{
    public partial class NewDanhMucBoSung : Form
    {
        private int id;

        private int danhMucId;
        private int khaiThacId;
        private int thamKhaoId;

        public NewDanhMucBoSung()
        {
            InitializeComponent();
        }

        public NewDanhMucBoSung(int id, bool isNewForm)
        {
            InitializeComponent();

            LoadLoaiTaiLieu();

            if (isNewForm)
            {
                danhMucId = id;
                LoadDataFromParent(id);
            }
            else
            {
                this.id = id;                
            }

            drlLoaiTaiLieu.Focus();
        }

        private void LoadDataForUpdateForm(DanhMucBoSung item)
        {
            danhMucId = item.DanhMuc;
            khaiThacId = item.KhaiThacVaSuDungTaiLieu;
            thamKhaoId = item.ThamKhao;

            for (int i = 0; i < drlLoaiTaiLieu.Items.Count; i++)
            {
                var listItem = (RadListDataItem)drlLoaiTaiLieu.Items[i];
                if (string.Equals(listItem.Text, item.LoaiTaiLieu, StringComparison.InvariantCultureIgnoreCase))
                {
                    drlLoaiTaiLieu.SelectedIndex = i;                    
                    break;
                }
            }
            
            LoadDataFormTenTaiLieu();
            if (item.ThamKhao > 0)
            {
                var pBiz = new ThamKhaoTaiLieuBiz();
                var thamKhao = pBiz.LoadItem(item.ThamKhao);
                SelectThamKhao(thamKhao);
                textNoiDungThamKhao.Text = item.NoiDung;

                for (int i = 0; i < drlTenTaiLieu.Items.Count; i++)
                {
                    var listItem = (RadListDataItem)drlTenTaiLieu.Items[i];
                    if (string.Equals(listItem.Text, thamKhao.LoaiTaiLieu, StringComparison.InvariantCultureIgnoreCase))
                    {
                        drlTenTaiLieu.SelectedIndex = i;
                        break;
                    }
                }
            
            }
            else
            {
                var pBiz = new KhaiThacVaSuDungTaiLieuBiz();
                var khaiThac = pBiz.LoadItem(item.KhaiThacVaSuDungTaiLieu);
                SelectKhaiThac(khaiThac);
                textNoiDungKhaiThac.Text = item.NoiDung;

                for (int i = 0; i < drlTenTaiLieu.Items.Count; i++)
                {
                    var listItem = (RadListDataItem)drlTenTaiLieu.Items[i];
                    if (string.Equals(listItem.Text, khaiThac.TenLoaiTaiLieu, StringComparison.InvariantCultureIgnoreCase))
                    {
                        drlTenTaiLieu.SelectedIndex = i;
                        break;
                    }
                }
            }
        }

        private void LoadDataFromParent(int parentId)
        {
            var biz = new DanhMucBiz();
            var item = biz.LoadItem(parentId);
            if (item != null)
            {
                textKhlt.Text = item.Khlt;
                textSbq.Text = item.Sqb;
                textTenBaoCao.Text = item.TenBaoCao;
            }
        }

        private void LoadLoaiTaiLieu()
        {
            drlLoaiTaiLieu.Items.Clear();

            var item = new RadListDataItem();
            item.Text = "Báo cáo điều tra, tìm kiếm, đánh giá, thăm dò khoáng sản";
            item.Value = "II.A";
            drlLoaiTaiLieu.Items.Add(item);

            item = new RadListDataItem();
            item.Text = "Báo cáo đo vẽ lập bản đồ địa chất khoáng sản";
            item.Value = "II.B";
            drlLoaiTaiLieu.Items.Add(item);

            item = new RadListDataItem();
            item.Text = "Báo cáo địa chất đô thị";
            item.Value = "II.C";
            drlLoaiTaiLieu.Items.Add(item);

            item = new RadListDataItem();
            item.Text = "Báo cáo Địa chất thủy văn - Địa chất công trình";
            item.Value = "II.D";
            drlLoaiTaiLieu.Items.Add(item);

            item = new RadListDataItem();
            item.Text = "Báo cáo Địa vật lý";
            item.Value = "II.E";
            drlLoaiTaiLieu.Items.Add(item);

            item = new RadListDataItem();
            item.Text = "Tài liệu quy hoạch điều tra cơ bản địa chất về tài nguyên khoáng sản; quy hoạch thăm dò, khai thác, chế biến và sử dụng khoáng sản";
            item.Value = "II.G";
            drlLoaiTaiLieu.Items.Add(item);

            item = new RadListDataItem();
            item.Text = "Báo cáo nghiên cứu chuyên đề";
            item.Value = "II.H";
            drlLoaiTaiLieu.Items.Add(item);

            item = new RadListDataItem();
            item.Text = "Tham khảo tài liệu";
            item.Value = "TKTL";
            drlLoaiTaiLieu.Items.Add(item);

            item = new RadListDataItem();
            item.Text = string.Empty;
            item.Value = string.Empty;
            drlLoaiTaiLieu.Items.Insert(0, item);
        }

        private void LoadDataFormTenTaiLieu()
        {
            var selectItem = (RadListDataItem)drlLoaiTaiLieu.SelectedItem;
            string ma = Convert.ToString(selectItem.Value);
                        
            drlTenTaiLieu.Items.Clear();

            if (!string.IsNullOrEmpty(ma))
            {
                if (string.Equals("TKTL", ma, StringComparison.InvariantCultureIgnoreCase))
                {
                    var bizThamKhao = new ThamKhaoTaiLieuBiz();
                    var itemThamKhaos = bizThamKhao.ViewAll();
                    foreach (var thamKhao in itemThamKhaos)
                    {
                        var item = new RadListDataItem(thamKhao.LoaiTaiLieu, thamKhao);
                        drlTenTaiLieu.Items.Add(item);
                    }
                }
                else
                {
                    var bizKhaiThac = new KhaiThacVaSuDungTaiLieuBiz();
                    var items = bizKhaiThac.LoadItemByMa(ma);

                    if (items != null)
                    {                        
                        foreach (var khaiThac in items)
                        {
                            var item = new RadListDataItem(khaiThac.TenLoaiTaiLieu, khaiThac);
                            drlTenTaiLieu.Items.Add(item);
                        }
                    }
                }                
            }
        }

        private void SaveItem(object sender, EventArgs e)
        {
            if (Validate())
            {
                string message;

                var biz = new DanhMucBoSungBiz();

                var item = new DanhMucBoSung();
                                
                item.KhaiThacVaSuDungTaiLieu = khaiThacId;
                item.ThamKhao = thamKhaoId;
                item.DanhMuc = danhMucId;

                if (item.ThamKhao > 0)
                {
                    item.NoiDung = textNoiDungThamKhao.Text;
                }
                else
                {
                    item.NoiDung = textNoiDungKhaiThac.Text;
                }
                
                item.LoaiTaiLieu = drlLoaiTaiLieu.Text;

                if (id > 0)
                {
                    item.Id = id;
                    biz.UpdateItem(item);

                    message = Constants.Messages.UpdateCompleted;
                    MessageBox.Show(message);
                    Utilities.CloseForm(this, new ViewDanhMucBoSung(danhMucId));
                }
                else
                {
                    biz.SaveItem(item);
                    message = Constants.Messages.InsertCompleted;

                    MessageBox.Show(message);
                    
                    textNoiDungKhaiThac.Text = string.Empty;
                    textNoiDungThamKhao.Text = string.Empty;

                    SelectLoaiTaiLieu(sender, e);
                }
            }
        }
        
        private void Cancel(object sender, EventArgs e)
        {
            Utilities.CloseForm(this, new ViewDanhMucBoSung(danhMucId));
        }

        private new bool Validate()
        {
            bool hasError = true;
            bool isFocused = false;
            errorProvider.Clear();

            if (string.IsNullOrEmpty(textKhlt.Text))
            {
                errorProvider.SetError(textKhlt, Constants.Messages.RequireMessage);
                hasError = false;

                textKhlt.Focus();
                isFocused = true;
            }

            if (string.IsNullOrEmpty(drlTenTaiLieu.Text))
            {
                errorProvider.SetError(drlTenTaiLieu, Constants.Messages.RequireMessage);
                hasError = false;

                if (!isFocused)
                {
                    drlTenTaiLieu.Focus();
                }
                isFocused = true;
            }

            
            if (string.IsNullOrEmpty(drlTenTaiLieu.Text))
            {
                errorProvider.SetError(drlTenTaiLieu, Constants.Messages.RequireMessage);
                hasError = false;

                if (!isFocused)
                {
                    drlTenTaiLieu.Focus();
                }
                isFocused = true;
            }

            if (drlTenTaiLieu.SelectedItem != null)
            {
                object selectedItem = ((RadListDataItem)drlTenTaiLieu.SelectedItem).Value;

                if (selectedItem is ThamKhaoTaiLieu)
                {
                    if (string.IsNullOrEmpty(textNoiDungThamKhao.Text))
                    {
                        errorProvider.SetError(textNoiDungThamKhao, Constants.Messages.RequireMessage);
                        hasError = false;

                        if (!isFocused)
                        {
                            textNoiDungThamKhao.Focus();
                        }
                        isFocused = true;
                    }
                }
                else
                {
                    if (selectedItem is KhaiThacVaSuDungTaiLieu)
                    {
                        if (string.IsNullOrEmpty(textNoiDungKhaiThac.Text))
                        {
                            errorProvider.SetError(textNoiDungKhaiThac, Constants.Messages.RequireMessage);
                            hasError = false;

                            if (!isFocused)
                            {
                                textNoiDungKhaiThac.Focus();
                            }
                            isFocused = true;
                        }
                    }
                }
            }
            return hasError;
        }

        private void FormLoad(object sender, EventArgs e)
        {
            groupThamKhao.Visible = false;
            groupKhaiThac.Visible = false;            

            var parent = MdiParent as MDI;
            if (parent != null)
            {
                //Utilities.ResetBackColor(parent.TopMenu, Constants.MenuIndex.TaiLieuVanBanPhapLy);
                parent.Status.Text = Constants.FormStatus.DanhMucBoSung;
            }

            if (id > 0)
            {
                var biz = new DanhMucBoSungBiz();
                var item = biz.LoadItem(id);

                if (item != null)
                {
                    LoadDataFromParent(item.DanhMuc);
                    LoadDataForUpdateForm(item);
                }
            }

            textKhlt.Focus();
        }                
        
        private void KhltKeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != (char)Keys.Enter) return;

            var biz = new DanhMucBiz();
            var item = biz.LoadItem(textKhlt.Text);
            if (item != null)
            {
                textTenBaoCao.Text = item.TenBaoCao;
                textSbq.Text = item.Sqb;
                danhMucId = item.Id;
            }
            else
            {
                MessageBox.Show("Không tìm được danh mục nào");
            }
        }

        private void SelectThamKhao(ThamKhaoTaiLieu item)
        {
            groupKhaiThac.Visible = false;
            groupThamKhao.Visible = true;
            thamKhaoId = item.Id;

            textMaThamKhao.Text = item.MaTaiLieu;
            textDonViThamKhao.Text = item.DonViTinh;
            textMucThuThamKhao.Text = Utilities.GetDecimalValue(item.Phi);            
        }

        private void SelectKhaiThac(KhaiThacVaSuDungTaiLieu item)
        {
            groupKhaiThac.Visible = true;
            groupThamKhao.Visible = false;
            khaiThacId = item.Id;

            textDangTaiLieuKhaiThac.Text = item.DangLoaiTaiLieu;
            textMaKhaiThac.Text = item.MaTaiLieu;
            textDonViTinhKhaiThac.Text = item.DonViTinh;
            
            numberPhotoKhaiThac.Text = Utilities.GetDecimalValue(item.MucThuPhoto);            
            numberInKhaiThac.Text = Utilities.GetDecimalValue(item.MucThuIn);
            numberWordKhaiThac.Text = Utilities.GetDecimalValue(item.MucThuOffice);
            numberRastorKhaiThac.Text = Utilities.GetDecimalValue(item.MucThuRastor);
            numberVectorKhaiThac.Text = Utilities.GetDecimalValue(item.MucThuVector);
        }        

        private void SelectLoaiTaiLieu(object sender, EventArgs e)
        {
            groupKhaiThac.Visible = false;
            groupThamKhao.Visible = false;
            drlTenTaiLieu.Items.Clear();
            drlTenTaiLieu.Text = string.Empty;
            LoadDataFormTenTaiLieu();
        }

        private void SelectTenTaiLieu(object sender, EventArgs e)
        {
            groupThamKhao.Visible = false;
            groupKhaiThac.Visible = false;

            object selectedItem = ((RadListDataItem)drlTenTaiLieu.SelectedItem).Value;            

            if (selectedItem is ThamKhaoTaiLieu)
            {                
                SelectThamKhao((ThamKhaoTaiLieu)selectedItem);                
            }
            else
            {
                if (selectedItem is KhaiThacVaSuDungTaiLieu)
                {
                    SelectKhaiThac((KhaiThacVaSuDungTaiLieu)selectedItem);
                }
            }
        }

        private void KeyNoiDungThamKhao(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != (char)Keys.Enter) return;
            SaveItem(sender, e);
        }

        private void KeyNoiDungKhaiThac(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != (char)Keys.Enter) return;
            SaveItem(sender, e);
        }                
    }
}
